home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / comm / misc / ecfax931024.lha / printers / RCS / init.c,v < prev    next >
Text File  |  1993-10-25  |  4KB  |  238 lines

  1. head    1.2;
  2. access;
  3. symbols
  4.     OCT93:1.2;
  5. locks;
  6. comment    @ * @;
  7.  
  8.  
  9. 1.2
  10. date    93.06.11.16.29.21;    author Rhialto;    state Exp;
  11. branches;
  12. next    1.1;
  13.  
  14. 1.1
  15. date    93.06.11.15.08.07;    author Rhialto;    state Exp;
  16. branches;
  17. next    ;
  18.  
  19.  
  20. desc
  21. @Initialisation code and message passing interface
  22. @
  23.  
  24.  
  25. 1.2
  26. log
  27. @First real RCS checkin
  28. @
  29. text
  30. @/* $Id$
  31.  * $Log$
  32.  */
  33.  
  34. /*
  35.  *  INIT.C
  36.  */
  37.  
  38. #include "defs.h"
  39. #include <clib/alib_protos.h>
  40. #include <clib/asl_protos.h>
  41.  
  42. Prototype __geta4 long DevInit(PrinterData *);
  43. Prototype __geta4 long DevExpunge(void);
  44. Prototype __geta4 long DevOpen(void);
  45. Prototype __geta4 long DevClose(void);
  46. Prototype __geta4 long MsgRender(long ct, long x, long y, long status);
  47. Prototype __geta4 void PrinterProc(void);
  48. Prototype void FakeSeg(void);
  49. Prototype CreateProc(char *, ULONG, ULONG, ULONG);
  50.  
  51. Prototype PrinterData *PD;
  52. Prototype PrinterExtendedData *PED;
  53. Prototype void *AslBase;
  54. Prototype struct FileRequester *FileReq;
  55.  
  56. PrinterData    *PD;
  57. PrinterExtendedData *PED;
  58. void           *AslBase;
  59. void           *DOSBase;
  60. struct FileRequester *FileReq;
  61.  
  62. const struct TagItem frtags[] = {
  63.     ASL_Hail,    (ULONG)"Select file to write FAX data in",
  64.     ASL_Dir,    (ULONG)"FAX:",
  65.     ASL_File,    (ULONG)"faxrastportdump",
  66.     TAG_DONE
  67. };
  68.  
  69. /*
  70.  * The message interface.
  71.  */
  72.  
  73. struct PrtMsg {
  74.     struct Message  pm_Msg;
  75.     long        pm_Type;
  76. #define PM_RENDER   1
  77. #define PM_INIT     2
  78. #define PM_EXPUNGE  3
  79. };
  80. #define pm_rc        pm_Type
  81.  
  82. struct RenderMsg {
  83.     struct PrtMsg   rm_PrtMsg;
  84.     long        rm_ct;
  85.     long        rm_x;
  86.     long        rm_y;
  87.     long        rm_status;
  88. };
  89.  
  90. struct MsgPort *ProcPort;
  91.  
  92. long
  93. SyncMsg(struct PrtMsg *m)
  94. {
  95.     m->pm_Msg.mn_ReplyPort = FindTask(NULL);
  96.     PutMsg(ProcPort, &m->pm_Msg);
  97.  
  98.     do {
  99.     Wait(SIGF_SINGLE);
  100.     } while (m->pm_Msg.mn_Node.ln_Type != NT_REPLYMSG);
  101.  
  102.     return m->pm_rc;
  103. }
  104.  
  105. __geta4 long
  106. DevInit(pd)
  107. PrinterData *pd;
  108. {
  109.     struct PrtMsg   pm;
  110. #ifdef DEBUG
  111.     initsyslog();
  112.     debug(("DevInit %08x\n", pd));
  113. #endif
  114.     DOSBase = OpenLibrary("dos.library", 0L);
  115.     ProcPort = CreatePort(NULL, 0L);
  116.     ProcPort->mp_Flags = PA_IGNORE;
  117.     FreeSignal(ProcPort->mp_SigBit);
  118.     debug(("CreateProc...\n"));
  119.     CreateProc("ElCheapoFaxPrinterDriver Process", 0, ((ULONG)FakeSeg)>>2, 4096);
  120.  
  121.     PD = pd;
  122.     PED= &PEDData;
  123.  
  124.     pm.pm_Type = PM_INIT;
  125.     return SyncMsg(&pm);
  126. }
  127.  
  128. __geta4 long
  129. DevExpunge(void)
  130. {
  131.     struct PrtMsg   pm;
  132.  
  133.     debug(("DevExpunge\n"));
  134.     pm.pm_Type = PM_EXPUNGE;
  135.     SyncMsg(&pm);
  136.  
  137.     if (DOSBase) {
  138.     CloseLibrary(DOSBase);
  139.     DOSBase = NULL;
  140.     }
  141. #ifdef DEBUG
  142.     uninitsyslog();
  143. #endif
  144.     return 0;
  145. }
  146.  
  147. __geta4 long
  148. DevOpen(void)
  149. {
  150.     debug(("DevOpen\n"));
  151.     if (DOSBase == NULL)
  152.     return -1;        /* VERY wrong!! */
  153.     return 0;
  154. }
  155.  
  156. __geta4 long
  157. DevClose(void)
  158. {
  159.     debug(("DevClose\n"));
  160.     return 0;
  161. }
  162.  
  163. __geta4 long
  164. MsgRender(long ct, long x, long y, long status)
  165. {
  166.     struct RenderMsg rm;
  167.  
  168.     rm.rm_PrtMsg.pm_Type = PM_RENDER;
  169.     rm.rm_ct = ct;
  170.     rm.rm_x = x;
  171.     rm.rm_y = y;
  172.     rm.rm_status = status;
  173.  
  174.     return SyncMsg(&rm.rm_PrtMsg);
  175. }
  176.  
  177. void
  178. chkabort(void)
  179. {
  180.     /* don't abort */
  181. }
  182.  
  183. __geta4 void
  184. PrinterProc(void)
  185. {
  186.     int         done = 0;
  187.     debug(("PrinterProc started\n"));
  188.  
  189.     /* First finish that MsgPort */
  190.     ProcPort->mp_SigTask = FindTask(NULL);
  191.     ProcPort->mp_SigBit = AllocSignal(-1L);
  192.     ProcPort->mp_Flags = PA_SIGNAL;
  193.  
  194.     for (;!done;) {
  195.     struct PrtMsg *pm;
  196.  
  197.     WaitPort(ProcPort);
  198.     while (pm = GetMsg(ProcPort)) {
  199.         switch (pm->pm_Type) {
  200.         case PM_RENDER:
  201. #define rm  ((struct RenderMsg *)pm)
  202.         pm->pm_rc = Render(rm->rm_ct, rm->rm_x, rm->rm_y, rm->rm_status);
  203.         break;
  204.         case PM_INIT:
  205.         AslBase = OpenLibrary("asl.library", 0);
  206.         if (AslBase) {
  207.             FileReq = AllocAslRequest(ASL_FileRequest, frtags);
  208.         }
  209.         debug(("DOSBase %08lx AslBase %08lx FReq %08lx\n", DOSBase, AslBase, FileReq));
  210.         pm->pm_rc = 0;
  211.         break;
  212.         case PM_EXPUNGE:
  213.         if (AslBase) {
  214.             if (FileReq) {
  215.             FreeAslRequest(FileReq);
  216.             FileReq = NULL;
  217.             }
  218.             CloseLibrary(AslBase);
  219.             AslBase = NULL;
  220.         }
  221.         done = 1;
  222.         }
  223.         pm->pm_Msg.mn_Node.ln_Type = NT_REPLYMSG;
  224.         Signal((struct Task *)pm->pm_Msg.mn_ReplyPort, SIGF_SINGLE);
  225.     }
  226.     }
  227. }
  228. @
  229.  
  230.  
  231. 1.1
  232. log
  233. @Initial revision
  234. @
  235. text
  236. @d1 3
  237. @
  238.